<?php

namespace App\Models;

use App\Models\Observer\EmailVerificationObserver;
use Illuminate\Support\Carbon;

class EmailVerification extends AbstractUser
{

    // 验证用途: 验证邮箱地址
    const TYPE_EMAIL = 'email';

    // 验证用途: 重置密码
    const TYPE_RESET_PASSWORD = 'password';

    // 过期时间: 分钟
    const EXPIRED_MINUTES = 60;

    /**
     * 表名
     *
     * @var string
     */
    protected $table = 'email_verifications';

    /**
     * 支持批量填充的字段
     *
     * @var array
     */
    protected $fillable = [
        'type', 'token', 'email'
    ];

    /**
     * 输出JSON时隐藏的字段
     *
     * @var array
     */
    protected $hidden = [
        'token', 'expired_at'
    ];

    /**
     * @var bool
     */
    public $timestamps = false;

    static public function boot()
    {
        parent::boot();

        // 绑定观察者
        self::observe(EmailVerificationObserver::class);
    }

    /**
     * 是否已过期
     *
     * @return bool
     */
    public function isExpired()
    {
        if ($this->expired_at) {

            return Carbon::parse($this->expired_at)->isPast();
        }
        // 没有该字段时视为已过期
        return true;
    }
}
